\hypertarget{class_q_qt_audio_manager}{}\section{Q\+Qt\+Audio\+Manager Class Reference}
\label{class_q_qt_audio_manager}\index{Q\+Qt\+Audio\+Manager@{Q\+Qt\+Audio\+Manager}}


The \mbox{\hyperlink{class_q_qt_audio_manager}{Q\+Qt\+Audio\+Manager}} class 为用户提供连接声卡的通道，一个\+Manager包括：输入选择，输出选择，输入读信号，输出函数。 关于回听：打开输入，不开输出=Q\+Audio\+Input，开输出增加\+Q\+Audio\+Output=回听。 关于输出：可以按照\+Timer时序write音频数据帧\+Bytes到输出设备。 关于输入：可以在ready\+Read里面接收到来自选定输入设备的音频帧。 地位等高于\+Q\+Qt\+Wav\+Sound\+Effect，目标为用户提供声卡输入端（音频输入设备）（拾音器）的音频数据帧，附加回听功能。（地位：封装层次） Q\+Qt\+Wav\+Sound\+Effect，目标为用户提供连续播放\+Wav的能力。  




{\ttfamily \#include $<$qqtaudiomanager.\+h$>$}

Inheritance diagram for Q\+Qt\+Audio\+Manager\+:\begin{figure}[H]
\begin{center}
\leavevmode
\includegraphics[height=3.000000cm]{class_q_qt_audio_manager}
\end{center}
\end{figure}
\subsection*{Signals}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_addec5c23fbb3eff8adc436ff9c3e7dcc}\label{class_q_qt_audio_manager_addec5c23fbb3eff8adc436ff9c3e7dcc}} 
void {\bfseries ready\+Read} ()
\end{DoxyCompactItemize}
\subsection*{Public Member Functions}
\begin{DoxyCompactItemize}
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_af4c15a60e54ddcb24c629cd84faf0da6}\label{class_q_qt_audio_manager_af4c15a60e54ddcb24c629cd84faf0da6}} 
{\bfseries Q\+Qt\+Audio\+Manager} (Q\+Object $\ast$parent=nullptr)
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_aee4d1db7a21c13b55dea0febb71bf8a8}\label{class_q_qt_audio_manager_aee4d1db7a21c13b55dea0febb71bf8a8}} 
Q\+Audio\+Device\+Info \& {\bfseries input\+Device\+Info} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_af9e51f192c5ac4335f375455b67d48df}\label{class_q_qt_audio_manager_af9e51f192c5ac4335f375455b67d48df}} 
Q\+Audio\+Device\+Info \& {\bfseries output\+Device\+Info} ()
\item 
Q\+Audio\+Format \& \mbox{\hyperlink{class_q_qt_audio_manager_ab1fd943d45b78a71e645f81ad35017af}{input\+Audio\+Format}} (void)
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_ac4fceb30fc9ce05da564587c5397f4d3}\label{class_q_qt_audio_manager_ac4fceb30fc9ce05da564587c5397f4d3}} 
Q\+Audio\+Format \& {\bfseries output\+Audio\+Format} (void)
\item 
void \mbox{\hyperlink{class_q_qt_audio_manager_a52342f883617ae2eff12813ae171810c}{start\+Input}} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_acebdbef5acc2aa62c437233b70003960}\label{class_q_qt_audio_manager_acebdbef5acc2aa62c437233b70003960}} 
void {\bfseries stop\+Input} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a26393ce110da69d23d6988496ddd7d0a}\label{class_q_qt_audio_manager_a26393ce110da69d23d6988496ddd7d0a}} 
Q\+Byte\+Array {\bfseries read\+All} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a73a69f6ed2d2ea740974d17b26dcbc14}\label{class_q_qt_audio_manager_a73a69f6ed2d2ea740974d17b26dcbc14}} 
Q\+Byte\+Array {\bfseries read} (qint64 maxlen)
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a0fa3c596503da0410d32dbf332594ff2}\label{class_q_qt_audio_manager_a0fa3c596503da0410d32dbf332594ff2}} 
Q\+Audio\+Input $\ast$ {\bfseries input\+Manager} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_aa47bf607aeac9416151e12d08784a0b9}\label{class_q_qt_audio_manager_aa47bf607aeac9416151e12d08784a0b9}} 
Q\+I\+O\+Device $\ast$ {\bfseries input\+Device} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a094ba272d6a680bf2343b6b496ae1e8d}\label{class_q_qt_audio_manager_a094ba272d6a680bf2343b6b496ae1e8d}} 
void {\bfseries start\+Output} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a603296c1b269fde726488c19af28c9b3}\label{class_q_qt_audio_manager_a603296c1b269fde726488c19af28c9b3}} 
void {\bfseries stop\+Output} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a9f3fdf8ee9f60f4838979f1c85d7a60e}\label{class_q_qt_audio_manager_a9f3fdf8ee9f60f4838979f1c85d7a60e}} 
void {\bfseries write} (const Q\+Byte\+Array \&bytes)
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_ab3546966142d768cb01af5054ace2133}\label{class_q_qt_audio_manager_ab3546966142d768cb01af5054ace2133}} 
Q\+Audio\+Output $\ast$ {\bfseries output\+Manager} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_af96dccce590726bd4fc5517fe7b68d62}\label{class_q_qt_audio_manager_af96dccce590726bd4fc5517fe7b68d62}} 
Q\+I\+O\+Device $\ast$ {\bfseries output\+Device} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a4d6f5f8d5d8f5ee9b32fdd920cea9b3b}\label{class_q_qt_audio_manager_a4d6f5f8d5d8f5ee9b32fdd920cea9b3b}} 
void {\bfseries start\+Default\+Input} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a51eeafdae59df60e3fbf04c1a0045636}\label{class_q_qt_audio_manager_a51eeafdae59df60e3fbf04c1a0045636}} 
void {\bfseries start\+Default\+Output} ()
\end{DoxyCompactItemize}
\subsection*{Static Public Member Functions}
\begin{DoxyCompactItemize}
\item 
static Q\+List$<$ Q\+Audio\+Device\+Info $>$ \mbox{\hyperlink{class_q_qt_audio_manager_a6551c9d1d11f95a1be7b4c87dce763cb}{available\+Input\+Devices}} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_ae124fe0847c7d99a4f744bdf71b2c00e}\label{class_q_qt_audio_manager_ae124fe0847c7d99a4f744bdf71b2c00e}} 
static Q\+List$<$ Q\+Audio\+Device\+Info $>$ {\bfseries available\+Output\+Devices} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a75353f93b00230f6415cc58cf49a20a3}\label{class_q_qt_audio_manager_a75353f93b00230f6415cc58cf49a20a3}} 
static Q\+Audio\+Device\+Info {\bfseries default\+Input\+Device} ()
\item 
\mbox{\Hypertarget{class_q_qt_audio_manager_a02794494d00c892b990d693ff80a66a3}\label{class_q_qt_audio_manager_a02794494d00c892b990d693ff80a66a3}} 
static Q\+Audio\+Device\+Info {\bfseries default\+Output\+Device} ()
\end{DoxyCompactItemize}


\subsection{Detailed Description}
The \mbox{\hyperlink{class_q_qt_audio_manager}{Q\+Qt\+Audio\+Manager}} class 为用户提供连接声卡的通道，一个\+Manager包括：输入选择，输出选择，输入读信号，输出函数。 关于回听：打开输入，不开输出=Q\+Audio\+Input，开输出增加\+Q\+Audio\+Output=回听。 关于输出：可以按照\+Timer时序write音频数据帧\+Bytes到输出设备。 关于输入：可以在ready\+Read里面接收到来自选定输入设备的音频帧。 地位等高于\+Q\+Qt\+Wav\+Sound\+Effect，目标为用户提供声卡输入端（音频输入设备）（拾音器）的音频数据帧，附加回听功能。（地位：封装层次） Q\+Qt\+Wav\+Sound\+Effect，目标为用户提供连续播放\+Wav的能力。 

处理声音三要点 声音的格式 ，也就是声音三要素，输入一个、输出一个，manager对其分开管理，但是建议用户合并为一个置等。通道数、采样位宽、采样率 声音设备 ，输入一个、输出一个，manager管理start等接口，manager内部的input\+Manager和output\+Manager负责其他接口。 声音设备的读写出入口 ，manager管理，包括可读信号和写入函数。

先确定输入、输出设备， Qt提供建议格式，一般建议用户选择使用输出设备的建议格式，或者使用两个公共的格式。 然后，读写设备即可。 manager把读写声音设备当做读写一个设备处理。支持本地声卡，蓝牙连接的声卡，hdmi接口上的声卡，其他接口上的声卡。只要系统显示的，一般都支持。

$\ast$$\ast$$\ast$$\ast$$\ast$$\ast$$\ast$使用\+Q\+Qt\+Audio\+Manager，用户关注输入、输出设备的切换，和输入、输出格式的改变即可，其他的不必关注。$\ast$$\ast$$\ast$$\ast$$\ast$$\ast$$\ast$

原理： 声音三要素： 采样率， 量化精度， 声道 通常我们用一位二进制表示两种状态， 如1表示高电平， 0表示低电平。在音频领域里，如只用一位二进制表示声音，那么只能表示发声和不发声两种状态（蜂鸣器）。 如果使用过音频分析软件会发现，声音是由连续的不规则的波形来表示， 根本不可能用一位二进制数据表示一个人发出的声音。但可以用多位二进制的数据来表示(音频里通常是用8位或者16位). 如用8位数据表示 0 -- 20\+K\+Hz\+: 0xff可表示20\+K\+Hz, 0xfe表示19.92\+K\+Hz, 0xfc表示19.84\+K\+Hz .... 把声音经过测量转换成多位的二进制数据就是在计算机系统里存储的原始声音数据(也叫pcm数据)， 数据的位数就是量化精度。通常是8位/16位

采样率就是声音转换成二进制数据的频率，常用的采样率有： 8000, 11025, 22050, 44100, 48000 从声音的还原角度来说采样率越高，质量就越好。

声音就是表示声音源的通道。嵌入式系统里通常是单声道/双声道. C\+D唱片通常是发烧友所用的，片中没有图像。而一张蝶片有650\+M左右，为什么只有十多首歌曲？ 算一算： 高保真肯定是用最高的采样率48000, 量化精度16位(2字节)， 立体声2声道. 一首歌通常200秒 48000 $\ast$ 2 $\ast$ 2 $\ast$ 200 = 38400000字节, 大概38\+M一首歌曲

$\ast$$\ast$$\ast$$\ast$由于\+Qt 实现上的原因，暂时仅仅支持桌面。在安卓上在关闭时会崩溃$\ast$$\ast$$\ast$$\ast$ 

\subsection{Member Function Documentation}
\mbox{\Hypertarget{class_q_qt_audio_manager_a6551c9d1d11f95a1be7b4c87dce763cb}\label{class_q_qt_audio_manager_a6551c9d1d11f95a1be7b4c87dce763cb}} 
\index{Q\+Qt\+Audio\+Manager@{Q\+Qt\+Audio\+Manager}!available\+Input\+Devices@{available\+Input\+Devices}}
\index{available\+Input\+Devices@{available\+Input\+Devices}!Q\+Qt\+Audio\+Manager@{Q\+Qt\+Audio\+Manager}}
\subsubsection{\texorpdfstring{available\+Input\+Devices()}{availableInputDevices()}}
{\footnotesize\ttfamily Q\+List$<$ Q\+Audio\+Device\+Info $>$ Q\+Qt\+Audio\+Manager\+::available\+Input\+Devices (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})\hspace{0.3cm}{\ttfamily [static]}}

选择输入、输出设备 \mbox{\Hypertarget{class_q_qt_audio_manager_ab1fd943d45b78a71e645f81ad35017af}\label{class_q_qt_audio_manager_ab1fd943d45b78a71e645f81ad35017af}} 
\index{Q\+Qt\+Audio\+Manager@{Q\+Qt\+Audio\+Manager}!input\+Audio\+Format@{input\+Audio\+Format}}
\index{input\+Audio\+Format@{input\+Audio\+Format}!Q\+Qt\+Audio\+Manager@{Q\+Qt\+Audio\+Manager}}
\subsubsection{\texorpdfstring{input\+Audio\+Format()}{inputAudioFormat()}}
{\footnotesize\ttfamily Q\+Audio\+Format \& Q\+Qt\+Audio\+Manager\+::input\+Audio\+Format (\begin{DoxyParamCaption}\item[{void}]{ }\end{DoxyParamCaption})}

选择音频流的格式 \mbox{\Hypertarget{class_q_qt_audio_manager_a52342f883617ae2eff12813ae171810c}\label{class_q_qt_audio_manager_a52342f883617ae2eff12813ae171810c}} 
\index{Q\+Qt\+Audio\+Manager@{Q\+Qt\+Audio\+Manager}!start\+Input@{start\+Input}}
\index{start\+Input@{start\+Input}!Q\+Qt\+Audio\+Manager@{Q\+Qt\+Audio\+Manager}}
\subsubsection{\texorpdfstring{start\+Input()}{startInput()}}
{\footnotesize\ttfamily void Q\+Qt\+Audio\+Manager\+::start\+Input (\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

操作输入、输出设备 

The documentation for this class was generated from the following files\+:\begin{DoxyCompactItemize}
\item 
R\+:/\+Develop/a0-\/develop/\+Lib\+Q\+Qt/src/multimedia/qqtaudiomanager.\+h\item 
R\+:/\+Develop/a0-\/develop/\+Lib\+Q\+Qt/src/multimedia/qqtaudiomanager.\+cpp\end{DoxyCompactItemize}
